package primary.code11_Digit;

import lombok.extern.slf4j.Slf4j;

/**
 * 判断某个数是否为2的幂次，4的幂次
 * <p>
 * 分析：
 * 需要满足2个条件： 只有一个权位为1，且在特定的权位上
 */
@Slf4j
public class Code02_Power {

    public static boolean is2Power(int num) {
        int mostRightOne = (~num + 1) & num;
        return mostRightOne == num;
    }

    public static boolean is4Power(int num) {
        int mostRightOne = (~num + 1) & num;
        if (mostRightOne != num) {
            return false;
        }
        return (num & 0x55555555) != 0;
    }

    public static void main(String[] args) {
        log.info("{} 是否是2的幂次: {}", 1024, is2Power(1024));
        log.info("{} 是否是4的幂次: {}", 1024, is4Power(1024));
        log.info("{} 是否是2的幂次: {}", 2048, is2Power(2048));
        log.info("{} 是否是4的幂次: {}", 2048, is4Power(2048));
    }
}
